home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cl_7_bug.zip / BUG_4.ERR < prev    next >
Text File  |  1992-10-10  |  10KB  |  341 lines

  1. ;    Static Name Aliases
  2. ;
  3.     TITLE   bug_4.c
  4.     .8087
  5. INCLUDELIB      LLIBCE
  6. INCLUDELIB    OLDNAMES.LIB
  7. BUG_4_TEXT    SEGMENT  WORD PUBLIC 'CODE'
  8. BUG_4_TEXT    ENDS
  9. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  10. _DATA    ENDS
  11. CONST    SEGMENT  WORD PUBLIC 'CONST'
  12. CONST    ENDS
  13. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  14. _BSS    ENDS
  15. DGROUP    GROUP    CONST, _BSS, _DATA
  16.     ASSUME DS: DGROUP, SS: DGROUP
  17. EXTRN    __acrtused:ABS
  18. EXTRN    _printf:FAR
  19. EXTRN    _puts:FAR
  20. _DATA      SEGMENT
  21. $SG269    DB    '!!!!!!!!!!!!!!!!WORKS!',  00H
  22. $SG270    DB    'What a suprise, the function worked',  00H
  23. $SG272    DB    'This program doesn''t work (forminfo= ''%s'')',  0aH,  00H
  24. _DATA      ENDS
  25. BUG_4_TEXT      SEGMENT
  26.     ASSUME    CS: BUG_4_TEXT
  27.     PUBLIC    _main
  28. _main    PROC FAR
  29. ;|*** /*
  30. ;|***    This program shows how CL can't even handle a simple operation as *pos++=..
  31. ;|***    without failing
  32. ;|*** */   
  33. ;|*** 
  34. ;|*** #include <stdio.h>
  35. ;|*** 
  36. ;|*** #define MAX_SORT_ORDERS 16
  37. ;|*** 
  38. ;|*** typedef struct st_prt_var {            /* Info p} sista sk{rmen */
  39. ;|***    char summaflag[MAX_SORT_ORDERS],repeat[1];
  40. ;|***    int sidbyteflag,sidsumma,start_sum,w_page,w_empty,leftmarg,rep_reg,rep_field;
  41. ;|*** } PRT_VAR;
  42. ;|*** 
  43. ;|*** typedef struct st_predit_param {
  44. ;|***   int        max_width;
  45. ;|***   int        post_width;
  46. ;|***   PRT_VAR    prtvar;                /* Inmatad form-info */
  47. ;|***   char        *c_postfix;
  48. ;|*** } SCREENPARAM;
  49. ;|*** 
  50. ;|*** static void save_var(SCREENPARAM *s,char *forminfo);
  51. ;|*** static void get_number_or_field(char *repeat,int *rep_reg,int *rep_field);
  52. ;|*** 
  53. ;|*** int main(int argc,char *argv[])
  54. ;|*** {
  55. ; Line 26
  56.     *** 000000    55             push    bp
  57.     *** 000001    8b ec             mov    bp,sp
  58.     *** 000003    83 ec 4a         sub    sp,74    ;004aH
  59.     *** 000006    57             push    di
  60.     *** 000007    56             push    si
  61. ;    argc = 6
  62. ;    argv = 8
  63. ;    s = -74
  64. ;    forminfo = -32
  65. ;|***   SCREENPARAM s;
  66. ;|***   char forminfo[32];
  67. ;|*** 
  68. ;|***   memset((char*) &forminfo,0,sizeof(forminfo));
  69. ; Line 30
  70.     *** 000008    33 c0             xor    ax,ax
  71.     *** 00000a    b9 20 00         mov    cx,32    ;0020H
  72.     *** 00000d    8d 7e e0         lea    di,WORD PTR [bp-32]    ;forminfo
  73.     *** 000010    16             push    ss
  74.     *** 000011    07             pop    es
  75.     *** 000012    f3             rep
  76.     *** 000013    aa             stosb
  77. ;|***   memset((char*) &s,0,sizeof(s));
  78. ; Line 31
  79.     *** 000014    b9 2a 00         mov    cx,42    ;002aH
  80.     *** 000017    8d 7e b6         lea    di,WORD PTR [bp-74]    ;s
  81.     *** 00001a    f3             rep
  82.     *** 00001b    aa             stosb
  83. ;|*** 
  84. ;|***     /* Fill structure with something */
  85. ;|***   memset(s.prtvar.summaflag,'!',16);
  86. ; Line 34
  87.     *** 00001c    b8 21 00         mov    ax,33    ;0021H
  88.     *** 00001f    b9 10 00         mov    cx,16    ;0010H
  89.     *** 000022    8d 7e ba         lea    di,WORD PTR [bp-70]
  90.     *** 000025    f3             rep
  91.     *** 000026    aa             stosb
  92. ;|***   s.prtvar.sidbyteflag='W';
  93. ; Line 35
  94.     *** 000027    c7 46 cc 57 00         mov    WORD PTR [bp-52],87    ;0057H
  95. ;|***   s.prtvar.sidsumma='O';
  96. ; Line 36
  97.     *** 00002c    c7 46 ce 4f 00         mov    WORD PTR [bp-50],79    ;004fH
  98. ;|***   s.prtvar.start_sum='R';
  99. ; Line 37
  100.     *** 000031    c7 46 d0 52 00         mov    WORD PTR [bp-48],82    ;0052H
  101. ;|***   s.max_width='K';
  102. ; Line 38
  103.     *** 000036    c7 46 b6 4b 00         mov    WORD PTR [bp-74],75    ;004bH    ;s
  104. ;|***   s.prtvar.w_page='S';
  105. ; Line 39
  106.     *** 00003b    c7 46 d2 53 00         mov    WORD PTR [bp-46],83    ;0053H
  107. ;|***   s.post_width='!';
  108. ; Line 40
  109.     *** 000040    89 46 b8         mov    WORD PTR [bp-72],ax
  110. ;|***   s.prtvar.rep_reg=0;
  111. ; Line 41
  112.     *** 000043    c7 46 d8 00 00         mov    WORD PTR [bp-40],0
  113. ;|*** 
  114. ;|***   save_var(&s,forminfo);
  115. ; Line 43
  116.     *** 000048    8d 46 e0         lea    ax,WORD PTR [bp-32]    ;forminfo
  117.     *** 00004b    16             push    ss
  118.     *** 00004c    50             push    ax
  119.     *** 00004d    8d 46 b6         lea    ax,WORD PTR [bp-74]    ;s
  120.     *** 000050    16             push    ss
  121.     *** 000051    50             push    ax
  122.     *** 000052    9a 00 00 00 00         call    FAR PTR save_var
  123.     *** 000057    83 c4 08         add    sp,8
  124. ;|***   if (!strcmp(forminfo,"!!!!!!!!!!!!!!!!WORKS!"))
  125. ; Line 44
  126.     *** 00005a    8c d8             mov    ax,ds
  127.     *** 00005c    b9 17 00         mov    cx,23    ;0017H
  128.     *** 00005f    bf 00 00         mov    di,OFFSET DGROUP:$SG269
  129.     *** 000062    8d 76 e0         lea    si,WORD PTR [bp-32]    ;forminfo
  130.     *** 000065    8e c0             mov    es,ax
  131.     *** 000067    33 c0             xor    ax,ax
  132.     *** 000069    f3             repz
  133.     *** 00006a    a6             cmpsb
  134.     *** 00006b    74 05             je    $L285
  135.     *** 00006d    1b c0             sbb    ax,ax
  136.     *** 00006f    1d ff ff         sbb    ax,-1    ;ffffH
  137.                     $L285:
  138.     *** 000072    0b c0             or    ax,ax
  139.     *** 000074    75 10             jne    $I268
  140. ;|***     puts("What a suprise, the function worked");
  141. ; Line 45
  142.     *** 000076    b8 17 00         mov    ax,OFFSET DGROUP:$SG270
  143.     *** 000079    1e             push    ds
  144.     *** 00007a    50             push    ax
  145.     *** 00007b    9a 00 00 00 00         call    FAR PTR _puts
  146.     *** 000080    83 c4 04         add    sp,4
  147. ;|***   else
  148. ; Line 46
  149.     *** 000083    eb 13             jmp    SHORT $I271
  150.     *** 000085    90             nop    
  151.                     $I268:
  152. ;|***     printf("This program doesn't work (forminfo= '%s')\n",forminfo);
  153. ; Line 47
  154.     *** 000086    8d 46 e0         lea    ax,WORD PTR [bp-32]    ;forminfo
  155.     *** 000089    16             push    ss
  156.     *** 00008a    50             push    ax
  157.     *** 00008b    b8 3b 00         mov    ax,OFFSET DGROUP:$SG272
  158.     *** 00008e    1e             push    ds
  159.     *** 00008f    50             push    ax
  160.     *** 000090    9a 00 00 00 00         call    FAR PTR _printf
  161.     *** 000095    83 c4 08         add    sp,8
  162.                     $I271:
  163. ;|***   return 0;
  164. ; Line 48
  165.     *** 000098    33 c0             xor    ax,ax
  166. ;|*** }
  167. ; Line 49
  168.     *** 00009a    5e             pop    si
  169.     *** 00009b    5f             pop    di
  170.     *** 00009c    8b e5             mov    sp,bp
  171.     *** 00009e    5d             pop    bp
  172.     *** 00009f    cb             ret    
  173.  
  174. _main    ENDP
  175.  
  176. save_var    PROC FAR
  177. ;|***    
  178. ;|*** static void save_var(s,forminfo)
  179. ;|*** register SCREENPARAM *s;
  180. ;|*** register char *forminfo;
  181. ;|*** {
  182. ; Line 54
  183.     *** 0000a0    55             push    bp
  184.     *** 0000a1    8b ec             mov    bp,sp
  185.     *** 0000a3    83 ec 0a         sub    sp,10    ;000aH
  186.     *** 0000a6    57             push    di
  187.     *** 0000a7    56             push    si
  188. ;    s = 6
  189. ;    forminfo = 10
  190. ;    pos = -4
  191. ;    prtvar = -8
  192. ;|***   char *pos;
  193. ;|***   PRT_VAR *prtvar;
  194. ;|*** 
  195. ;|***   prtvar= &s->prtvar;
  196. ;|***   get_number_or_field(prtvar->repeat,&prtvar->rep_reg,&prtvar->rep_field);
  197. ; Line 59
  198.     *** 0000a8    8b 46 06         mov    ax,WORD PTR [bp+6]    ;s
  199.     *** 0000ab    8b 56 08         mov    dx,WORD PTR [bp+8]
  200.     *** 0000ae    05 04 00         add    ax,4
  201.     *** 0000b1    8b c8             mov    cx,ax
  202.     *** 0000b3    8b da             mov    bx,dx
  203.     *** 0000b5    05 20 00         add    ax,32    ;0020H
  204.     *** 0000b8    52             push    dx
  205.     *** 0000b9    50             push    ax
  206.     *** 0000ba    8b d1             mov    dx,cx
  207.     *** 0000bc    8b f3             mov    si,bx
  208.     *** 0000be    83 c1 1e         add    cx,30    ;001eH
  209.     *** 0000c1    53             push    bx
  210.     *** 0000c2    51             push    cx
  211.     *** 0000c3    89 56 fc         mov    WORD PTR [bp-4],dx    ;pos
  212.     *** 0000c6    89 76 fe         mov    WORD PTR [bp-2],si
  213.     *** 0000c9    83 c2 10         add    dx,16    ;0010H
  214.     *** 0000cc    56             push    si
  215.     *** 0000cd    52             push    dx
  216.     *** 0000ce    8b f1             mov    si,cx
  217.     *** 0000d0    8b fb             mov    di,bx
  218.     *** 0000d2    9a 00 00 00 00         call    FAR PTR get_number_or_field
  219.     *** 0000d7    83 c4 0c         add    sp,12    ;000cH
  220. ;|***   pos=forminfo;
  221. ;|***   memcpy(pos,prtvar->summaflag,MAX_SORT_ORDERS);
  222. ; Line 61
  223.     *** 0000da    8b 46 fc         mov    ax,WORD PTR [bp-4]    ;pos
  224.     *** 0000dd    8b 56 fe         mov    dx,WORD PTR [bp-2]
  225.     *** 0000e0    56             push    si
  226.     *** 0000e1    57             push    di
  227.     *** 0000e2    1e             push    ds
  228.     *** 0000e3    8b f0             mov    si,ax
  229.     *** 0000e5    8e da             mov    ds,dx
  230.     ASSUME DS: NOTHING
  231.     *** 0000e7    c4 7e 0a         les    di,DWORD PTR [bp+10]    ;forminfo
  232.     *** 0000ea    b9 08 00         mov    cx,8
  233.     *** 0000ed    f3             rep
  234.     *** 0000ee    a5             movsw
  235.     *** 0000ef    1f             pop    ds
  236.     ASSUME DS: DGROUP
  237.     *** 0000f0    5f             pop    di
  238.     *** 0000f1    5e             pop    si
  239. ;|***   pos+=16;
  240. ;|***   *pos++= (char) prtvar->sidbyteflag;
  241. ; Line 63
  242.     *** 0000f2    8e c2             mov    es,dx
  243.     *** 0000f4    8b d8             mov    bx,ax
  244.     *** 0000f6    26 8a 4f 12         mov    cl,BYTE PTR es:[bx+18]
  245.     *** 0000fa    c4 5e 0a         les    bx,DWORD PTR [bp+10]    ;forminfo
  246.     *** 0000fd    26 88 4f 10         mov    BYTE PTR es:[bx+16],cl
  247. ;|***   *pos++= (char) prtvar->sidsumma;
  248. ; Line 64
  249.     *** 000101    8e c2             mov    es,dx
  250.     *** 000103    8b d8             mov    bx,ax
  251.     *** 000105    26 8a 4f 14         mov    cl,BYTE PTR es:[bx+20]
  252.     *** 000109    c4 5e 0a         les    bx,DWORD PTR [bp+10]    ;forminfo
  253.     *** 00010c    83 c3 10         add    bx,16    ;0010H
  254.     *** 00010f    26 88 4f 01         mov    BYTE PTR es:[bx+1],cl
  255. ;|***   *pos++= (char) prtvar->start_sum;
  256. ; Line 65
  257.     *** 000113    8c c1             mov    cx,es
  258.     *** 000115    8e c2             mov    es,dx
  259.     *** 000117    8b d3             mov    dx,bx
  260.     *** 000119    8b d8             mov    bx,ax
  261.     *** 00011b    26 8a 5f 16         mov    bl,BYTE PTR es:[bx+22]
  262.     *** 00011f    89 5e fa         mov    WORD PTR [bp-6],bx
  263.     *** 000122    bb 01 00         mov    bx,1
  264.     *** 000125    03 da             add    bx,dx
  265.     *** 000127    8e c1             mov    es,cx
  266.     *** 000129    8a 46 fa         mov    al,BYTE PTR [bp-6]
  267.     ***